package com.heiye.user.biz.controller;

import com.heiye.framework.biz.operationlog.aspect.ApiOperationLog;
import com.heiye.framework.common.response.Response;
import com.heiye.user.api.dto.req.FindUserByIdReqDTO;
import com.heiye.user.api.dto.req.FindUsersByIdsReqDTO;
import com.heiye.user.api.dto.req.RegisterUserReqDTO;
import com.heiye.user.api.dto.resp.RegisterUserRspDTO;
import com.heiye.user.api.dto.resp.FindUserByIdRspDTO;
import com.heiye.user.biz.model.dto.resp.FindUserRspDTO;
import com.heiye.user.biz.model.vo.FindUserProfileReqVO;
import com.heiye.user.biz.model.vo.FindUserProfileRspVO;
import com.heiye.user.biz.model.vo.UpdateUserInfoReqVO;
import com.heiye.user.biz.model.vo.UserLanguageUpdateReqVO;
import com.heiye.user.biz.service.UserService;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * @author: heiye
 * @date: 2024/09/29 下午3:16
 * @version: v1.0.0
 * @description: 用户controller
 */
@Slf4j
@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    /**
     * 修改用户的母语，以及感兴趣的语言
     *
     * @param userLanguageUpdateReqVO
     * @return
     */
    @PostMapping("/userLanguageUpdate")
    @ApiOperationLog(description = "修改用户语言信息")
    public Response<?> userLanguageUpdate(@RequestBody UserLanguageUpdateReqVO userLanguageUpdateReqVO) {
        return userService.userLanguageUpdate(userLanguageUpdateReqVO);
    }

    /**
     * 查找用户基本信息
     *
     * @return
     */
    @GetMapping("/find")
    @ApiOperationLog(description = "查找用户基本信息")
    public Response<FindUserRspDTO> find() {
        return userService.find();
    }

    /**
     * 用户信息修改
     *
     * @param updateUserInfoReqVO
     * @return
     */
    @PostMapping("/update")
    @ApiOperationLog(description = "修改用户基本信息")
    public Response<?> updateUserInfo(@RequestBody @Validated UpdateUserInfoReqVO updateUserInfoReqVO) {
        return userService.updateUserInfo(updateUserInfoReqVO);
    }

    // ===================================== 对其他服务提供的接口 =====================================

    /**
     * 用户注册
     *
     * @param registerUserReqDTO
     * @return
     */
    @PostMapping("/register")
    @ApiOperationLog(description = "用户注册")
    public Response<RegisterUserRspDTO> register(@RequestBody RegisterUserReqDTO registerUserReqDTO) {
        return userService.register(registerUserReqDTO);
    }

    /**
     * 根据用户 ID 查询用户信息
     *
     * @param findUserByIdReqDTO
     * @return
     */
    @PostMapping("/findById")
    @ApiOperationLog(description = "根据用户 ID 查询用户信息")
    public Response<FindUserByIdRspDTO> findById(@RequestBody @Validated FindUserByIdReqDTO findUserByIdReqDTO) {
        return userService.findById(findUserByIdReqDTO);
    }

    /**
     * 批量查询用户信息
     *
     * @param findUsersByIdsReqDTO
     * @return
     */
    @PostMapping("/findByIds")
    @ApiOperationLog(description = "批量查询用户信息")
    public Response<List<FindUserByIdRspDTO>> findByIds(@RequestBody @Validated FindUsersByIdsReqDTO findUsersByIdsReqDTO) {
        return userService.findByIds(findUsersByIdsReqDTO);
    }

    /**
     * 获取用户主页信息
     *
     * @param findUserProfileReqVO
     * @return
     */
    @PostMapping("/profile")
    public Response<FindUserProfileRspVO> findUserProfile(@RequestBody @Validated FindUserProfileReqVO findUserProfileReqVO) {
        return userService.findUserProfile(findUserProfileReqVO);
    }
}
